// SPDX-FileCopyrightText: 2024 Amir kokovamir6@gmail.com
// SPDX-License-Identifier: Apache-2.0

// std lib C++
#include <iostream>

// header file window
#include "window.h"


GLFWwindow* window::win = nullptr;


bool window::initialization(const std::string& title, int w, int h)
{
    // Инициализация glfw
    if(!glfwInit()) {
        finallyzation();
        return false;
    }

    // создание окна glfw
    win = glfwCreateWindow(w, h, title.c_str(), nullptr, nullptr);
    if(win == nullptr) {
        finallyzation();
        return false;
    }

    // create context
    glfwMakeContextCurrent(win);

    // инициализация glad
    if(!gladLoadGL())
            return false;

    // opengl settings
    // glEnable(GL_DEPTH_TEST);


    // если ничего не завершилось ошибкой, то всё должно работать
    return true;
}


// Очистка и заливка цветом
void window::clear(const glm::vec4 &color) {
    glClearColor(color.r, color.g, color.b, color.a);
    glClear( GL_COLOR_BUFFER_BIT );
}


// Установка закрытия окна, понадобиться для закрытия окна клавишой или события
void window::setShouldCloseWindow(bool flag)
{
    glfwSetWindowShouldClose(win, flag);
    finallyzation();
    exit(0);
}


// двойная буфферизация
void window::swapBuffers() {
    glfwSwapBuffers(win);
}


// проверка на закрытия окна
bool window::isShouldCloseWindow()
{
    return glfwWindowShouldClose(win);
}


// очищение всех ресурсов glfw3
void window::finallyzation()
{
    std::cout << "Очистка системы окна..." << std::endl;
    glfwTerminate();
}
